package com.dys.designpattern.singleton;

import java.io.Serializable;

/**
 * @author 田建松
 * @version V1.0.0
 * @description 1.单例模式-饿汉式
 *              在类加载期间初始化静态的私有实例，保证INSTANCE创建实例是线程安全的
 *              缺点：不支持延迟加载，若对象较大，会造成内存的浪费。
 * @date 2024/5/9
 * @since 1.0
 */
public class EagerSingleton implements Serializable {

    /**
     * 1.私有构造器
     */
    private EagerSingleton() {
        // 防止反射破坏
        if (INSTANCE!=null) {
            throw new RuntimeException("不允许非法访问");
        }
    }

    /**
     * 2.在当前类中创建私有静态的全局实例
     */
    private static final EagerSingleton INSTANCE = new EagerSingleton();

    /**
     * 3.提供一个全局访问点,供外部获取单例对象
     *
     * @return 私有静态全局单例对象
     */
    public static EagerSingleton getInstance() {
        return INSTANCE;
    }

    /**
     * 防止反序列化对于单例模式的破坏
     */
    private Object readResolve() {
        return INSTANCE;
    }
}